package com.lvmama.rhino.utils;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author 吴川通
 * @version V1.0
 * @Title: HBaseKeyUtils
 * @Package com.lvtu.client.push.utils
 * @Description: 用于生成HBase中的RowKey，避免在不同地方写相同的生成ROWKEY代码
 * @date 2016/9/22 14:53
 */
public class HBaseKeyUtils {

    /**
     * 生成push_deviceInfo表rowkey方法
     *
     * @param objectId 设备唯一标识
     * @return rowKey
     */
    public static String getDeviceRowKey(String objectId) {
        String indexRow = null;
        if (objectId.length() < 32) {
            indexRow = StringUtils.reverse(StringUtils.leftPad(objectId, 32, "0"));
        } else {
            indexRow = StringUtils.reverse(objectId.substring(0, 32));
        }
        return indexRow;
    }

    /**
     * 生成push_userInfo表rowkey方法
     *
     * @param userId 用户ID
     * @return rowKey
     */
    public static String getUserInfoRowKey(String userId) {
        if (StringUtils.isBlank(userId)) {
            throw new RuntimeException("userId is null");
        }
        return StringUtils.reverse(StringUtils.leftPad(userId, 8, "0"));
    }

    /**
     * 根据用户rowKey还原用户真实id
     *
     * @param userRowKey 用户rowKey
     * @return userId
     */
    public static String getUserIdFormRowKey(String userRowKey) {
        if (StringUtils.isBlank(userRowKey)) {
            throw new RuntimeException("userRowKey is null or empty!");
        }
        return StringUtils.reverse(StringUtils.stripEnd(userRowKey, "0"));
    }

    /**
     * 生成 push_history 表rowkey方法
     *
     * @param userId 用户ID
     * @return rowKey
     */
    public static String getPushHistoryRowKey(String userId) {
        return StringUtils.reverse(StringUtils.leftPad(userId, 8, "0")) + getYYYYMMDD();
    }

    /**
     * 生成 push_devicehistory 表rowkey方法
     *
     * @param objectId 设备唯一标识
     * @return rowKey
     */
    public static String getPushDeviceHistoryRowKey(String objectId) {
        return getDeviceRowKey(objectId) + getYYYYMMDD();
    }

    /**
     * 生成 push_mi_regId 表rowkey方法
     *
     * @param regId 小米注册id
     * @return rowKey
     */
    public static String getPushMiRegIdRowKey(String regId) {
        if (StringUtils.isBlank(regId)) {
            return null;
        }
        return DigestUtils.md5Hex(regId);
    }

    public static String getYYYYMMDD() {
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
        return format.format(new Date());

    }


}
